6dofimu28 2.2.0
Loading...
Searching...
No Matches
c6dofimu28.h
Go to the documentation of this file.
1/****************************************************************************
2** Copyright (C) 2020 MikroElektronika d.o.o.
3** Contact: https://www.mikroe.com/contact
4**
5** Permission is hereby granted, free of charge, to any person obtaining a copy
6** of this software and associated documentation files (the "Software"), to deal
7** in the Software without restriction, including without limitation the rights
8** to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9** copies of the Software, and to permit persons to whom the Software is
10** furnished to do so, subject to the following conditions:
11** The above copyright notice and this permission notice shall be
12** included in all copies or substantial portions of the Software.
13**
14** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15** EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
16** OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
17** IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
18** DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT
19** OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
20** USE OR OTHER DEALINGS IN THE SOFTWARE.
21****************************************************************************/
22
27
28#ifndef C6DOFIMU28_H
29#define C6DOFIMU28_H
30
31#ifdef __cplusplus
32extern "C"{
33#endif
34
39#ifdef PREINIT_SUPPORTED
40#include "preinit.h"
41#endif
42
43#ifdef MikroCCoreVersion
44 #if MikroCCoreVersion >= 1
45 #include "delays.h"
46 #endif
47#endif
48
49#include "drv_digital_out.h"
50#include "drv_digital_in.h"
51#include "drv_i2c_master.h"
52#include "drv_spi_master.h"
53#include "spi_specifics.h"
54
60
65
70
75#define C6DOFIMU28_REG_FUNC_CFG_ACCESS 0x01
76#define C6DOFIMU28_REG_PIN_CTRL 0x02
77#define C6DOFIMU28_REG_IF_CFG 0x03
78#define C6DOFIMU28_REG_ODR_TRIG_CFG 0x06
79#define C6DOFIMU28_REG_FIFO_CTRL1 0x07
80#define C6DOFIMU28_REG_FIFO_CTRL2 0x08
81#define C6DOFIMU28_REG_FIFO_CTRL3 0x09
82#define C6DOFIMU28_REG_FIFO_CTRL4 0x0A
83#define C6DOFIMU28_REG_COUNTER_BDR_1 0x0B
84#define C6DOFIMU28_REG_COUNTER_BDR_2 0x0C
85#define C6DOFIMU28_REG_INT1_CTRL 0x0D
86#define C6DOFIMU28_REG_INT2_CTRL 0x0E
87#define C6DOFIMU28_REG_WHO_AM_I 0x0F
88#define C6DOFIMU28_REG_CTRL1 0x10
89#define C6DOFIMU28_REG_CTRL2 0x11
90#define C6DOFIMU28_REG_CTRL3 0x12
91#define C6DOFIMU28_REG_CTRL4 0x13
92#define C6DOFIMU28_REG_CTRL5 0x14
93#define C6DOFIMU28_REG_CTRL6 0x15
94#define C6DOFIMU28_REG_CTRL7 0x16
95#define C6DOFIMU28_REG_CTRL8 0x17
96#define C6DOFIMU28_REG_CTRL9 0x18
97#define C6DOFIMU28_REG_CTRL10 0x19
98#define C6DOFIMU28_REG_CTRL_STATUS 0x1A
99#define C6DOFIMU28_REG_FIFO_STATUS1 0x1B
100#define C6DOFIMU28_REG_FIFO_STATUS2 0x1C
101#define C6DOFIMU28_REG_ALL_INT_SRC 0x1D
102#define C6DOFIMU28_REG_STATUS 0x1E
103#define C6DOFIMU28_REG_OUT_TEMP_L 0x20
104#define C6DOFIMU28_REG_OUT_TEMP_H 0x21
105#define C6DOFIMU28_REG_OUTX_L_G 0x22
106#define C6DOFIMU28_REG_OUTX_H_G 0x23
107#define C6DOFIMU28_REG_OUTY_L_G 0x24
108#define C6DOFIMU28_REG_OUTY_H_G 0x25
109#define C6DOFIMU28_REG_OUTZ_L_G 0x26
110#define C6DOFIMU28_REG_OUTZ_H_G 0x27
111#define C6DOFIMU28_REG_OUTX_L_A 0x28
112#define C6DOFIMU28_REG_OUTX_H_A 0x29
113#define C6DOFIMU28_REG_OUTY_L_A 0x2A
114#define C6DOFIMU28_REG_OUTY_H_A 0x2B
115#define C6DOFIMU28_REG_OUTZ_L_A 0x2C
116#define C6DOFIMU28_REG_OUTZ_H_A 0x2D
117#define C6DOFIMU28_REG_UI_OUTX_L_G_OIS_EIS 0x2E
118#define C6DOFIMU28_REG_UI_OUTX_H_G_OIS_EIS 0x2F
119#define C6DOFIMU28_REG_UI_OUTY_L_G_OIS_EIS 0x30
120#define C6DOFIMU28_REG_UI_OUTY_H_G_OIS_EIS 0x31
121#define C6DOFIMU28_REG_UI_OUTZ_L_G_OIS_EIS 0x32
122#define C6DOFIMU28_REG_UI_OUTZ_H_G_OIS_EIS 0x33
123#define C6DOFIMU28_REG_UI_OUTX_L_A_OIS_HG 0x34
124#define C6DOFIMU28_REG_UI_OUTX_H_A_OIS_HG 0x35
125#define C6DOFIMU28_REG_UI_OUTY_L_A_OIS_HG 0x36
126#define C6DOFIMU28_REG_UI_OUTY_H_A_OIS_HG 0x37
127#define C6DOFIMU28_REG_UI_OUTZ_L_A_OIS_HG 0x38
128#define C6DOFIMU28_REG_UI_OUTZ_H_A_OIS_HG 0x39
129#define C6DOFIMU28_REG_TIMESTAMP0 0x40
130#define C6DOFIMU28_REG_TIMESTAMP1 0x41
131#define C6DOFIMU28_REG_TIMESTAMP2 0x42
132#define C6DOFIMU28_REG_TIMESTAMP3 0x43
133#define C6DOFIMU28_REG_UI_STATUS_OIS 0x44
134#define C6DOFIMU28_REG_WAKE_UP_SRC 0x45
135#define C6DOFIMU28_REG_TAP_SRC 0x46
136#define C6DOFIMU28_REG_D6D_SRC 0x47
137#define C6DOFIMU28_REG_STATUS_CONTROLLER_MAINPAGE 0x48
138#define C6DOFIMU28_REG_EMB_FUNC_STATUS_MAINPAGE 0x49
139#define C6DOFIMU28_REG_FSM_STATUS_MAINPAGE 0x4A
140#define C6DOFIMU28_REG_MLC_STATUS_MAINPAGE 0x4B
141#define C6DOFIMU28_REG_HG_WAKE_UP_SRC 0x4C
142#define C6DOFIMU28_REG_CTRL2_XL_HG 0x4D
143#define C6DOFIMU28_REG_CTRL1_XL_HG 0x4E
144#define C6DOFIMU28_REG_INTERNAL_FREQ_FINE 0x4F
145#define C6DOFIMU28_REG_FUNCTIONS_ENABLE 0x50
146#define C6DOFIMU28_REG_HG_FUNCTIONS_ENABLE 0x52
147#define C6DOFIMU28_REG_HG_WAKE_UP_THS 0x53
148#define C6DOFIMU28_REG_INACTIVITY_DUR 0x54
149#define C6DOFIMU28_REG_INACTIVITY_THS 0x55
150#define C6DOFIMU28_REG_TAP_CFG0 0x56
151#define C6DOFIMU28_REG_TAP_CFG1 0x57
152#define C6DOFIMU28_REG_TAP_CFG2 0x58
153#define C6DOFIMU28_REG_TAP_THS_6D 0x59
154#define C6DOFIMU28_REG_TAP_DUR 0x5A
155#define C6DOFIMU28_REG_WAKE_UP_THS 0x5B
156#define C6DOFIMU28_REG_WAKE_UP_DUR 0x5C
157#define C6DOFIMU28_REG_FREE_FALL 0x5D
158#define C6DOFIMU28_REG_MD1_CFG 0x5E
159#define C6DOFIMU28_REG_MD2_CFG 0x5F
160#define C6DOFIMU28_REG_HAODR_CFG 0x62
161#define C6DOFIMU28_REG_EMB_FUNC_CFG 0x63
162#define C6DOFIMU28_REG_UI_HANDSHAKE_CTRL 0x64
163#define C6DOFIMU28_REG_UI_IF2_SHARED_0 0x65
164#define C6DOFIMU28_REG_UI_IF2_SHARED_1 0x66
165#define C6DOFIMU28_REG_UI_IF2_SHARED_2 0x67
166#define C6DOFIMU28_REG_UI_IF2_SHARED_3 0x68
167#define C6DOFIMU28_REG_UI_IF2_SHARED_4 0x69
168#define C6DOFIMU28_REG_UI_IF2_SHARED_5 0x6A
169#define C6DOFIMU28_REG_CTRL_EIS 0x6B
170#define C6DOFIMU28_REG_XL_HG_X_OFS_USR 0x6C
171#define C6DOFIMU28_REG_XL_HG_Y_OFS_USR 0x6D
172#define C6DOFIMU28_REG_XL_HG_Z_OFS_USR 0x6E
173#define C6DOFIMU28_REG_UI_INT_OIS 0x6F
174#define C6DOFIMU28_REG_UI_CTRL1_OIS 0x70
175#define C6DOFIMU28_REG_UI_CTRL2_OIS 0x71
176#define C6DOFIMU28_REG_UI_CTRL3_OIS 0x72
177#define C6DOFIMU28_REG_X_OFS_USR 0x73
178#define C6DOFIMU28_REG_Y_OFS_USR 0x74
179#define C6DOFIMU28_REG_Z_OFS_USR 0x75
180#define C6DOFIMU28_REG_FIFO_DATA_OUT_TAG 0x78
181#define C6DOFIMU28_REG_FIFO_DATA_OUT_BYTE_0 0x79
182#define C6DOFIMU28_REG_FIFO_DATA_OUT_BYTE_1 0x7A
183#define C6DOFIMU28_REG_FIFO_DATA_OUT_BYTE_2 0x7B
184#define C6DOFIMU28_REG_FIFO_DATA_OUT_BYTE_3 0x7C
185#define C6DOFIMU28_REG_FIFO_DATA_OUT_BYTE_4 0x7D
186#define C6DOFIMU28_REG_FIFO_DATA_OUT_BYTE_5 0x7E
187
192#define C6DOFIMU28_REG_SHUB_SENSOR_HUB_1 0x02
193#define C6DOFIMU28_REG_SHUB_SENSOR_HUB_2 0x03
194#define C6DOFIMU28_REG_SHUB_SENSOR_HUB_3 0x04
195#define C6DOFIMU28_REG_SHUB_SENSOR_HUB_4 0x05
196#define C6DOFIMU28_REG_SHUB_SENSOR_HUB_5 0x06
197#define C6DOFIMU28_REG_SHUB_SENSOR_HUB_6 0x07
198#define C6DOFIMU28_REG_SHUB_SENSOR_HUB_7 0x08
199#define C6DOFIMU28_REG_SHUB_SENSOR_HUB_8 0x09
200#define C6DOFIMU28_REG_SHUB_SENSOR_HUB_9 0x0A
201#define C6DOFIMU28_REG_SHUB_SENSOR_HUB_10 0x0B
202#define C6DOFIMU28_REG_SHUB_SENSOR_HUB_11 0x0C
203#define C6DOFIMU28_REG_SHUB_SENSOR_HUB_12 0x0D
204#define C6DOFIMU28_REG_SHUB_SENSOR_HUB_13 0x0E
205#define C6DOFIMU28_REG_SHUB_SENSOR_HUB_14 0x0F
206#define C6DOFIMU28_REG_SHUB_SENSOR_HUB_15 0x10
207#define C6DOFIMU28_REG_SHUB_SENSOR_HUB_16 0x11
208#define C6DOFIMU28_REG_SHUB_SENSOR_HUB_17 0x12
209#define C6DOFIMU28_REG_SHUB_SENSOR_HUB_18 0x13
210#define C6DOFIMU28_REG_SHUB_CONTROLLER_CONFIG 0x14
211#define C6DOFIMU28_REG_SHUB_TGT0_ADD 0x15
212#define C6DOFIMU28_REG_SHUB_TGT0_SUBADD 0x16
213#define C6DOFIMU28_REG_SHUB_TGT0_CONFIG 0x17
214#define C6DOFIMU28_REG_SHUB_TGT1_ADD 0x18
215#define C6DOFIMU28_REG_SHUB_TGT1_SUBADD 0x19
216#define C6DOFIMU28_REG_SHUB_TGT1_CONFIG 0x1A
217#define C6DOFIMU28_REG_SHUB_TGT2_ADD 0x1B
218#define C6DOFIMU28_REG_SHUB_TGT2_SUBADD 0x1C
219#define C6DOFIMU28_REG_SHUB_TGT2_CONFIG 0x1D
220#define C6DOFIMU28_REG_SHUB_TGT3_ADD 0x1E
221#define C6DOFIMU28_REG_SHUB_TGT3_SUBADD 0x1F
222#define C6DOFIMU28_REG_SHUB_TGT3_CONFIG 0x20
223#define C6DOFIMU28_REG_SHUB_DATAWRITE_TGT0 0x21
224#define C6DOFIMU28_REG_SHUB_STATUS_CONTROLLER 0x22
225
230#define C6DOFIMU28_REG_EMBF_PAGE_SEL 0x02
231#define C6DOFIMU28_REG_EMBF_EMB_FUNC_EN_A 0x04
232#define C6DOFIMU28_REG_EMBF_EMB_FUNC_EN_B 0x05
233#define C6DOFIMU28_REG_EMBF_EMB_FUNC_EXEC_STATUS 0x07
234#define C6DOFIMU28_REG_EMBF_PAGE_ADDRESS 0x08
235#define C6DOFIMU28_REG_EMBF_PAGE_VALUE 0x09
236#define C6DOFIMU28_REG_EMBF_EMB_FUNC_INT1 0x0A
237#define C6DOFIMU28_REG_EMBF_FSM_INT1 0x0B
238#define C6DOFIMU28_REG_EMBF_MLC_INT1 0x0D
239#define C6DOFIMU28_REG_EMBF_EMB_FUNC_INT2 0x0E
240#define C6DOFIMU28_REG_EMBF_FSM_INT2 0x0F
241#define C6DOFIMU28_REG_EMBF_MLC_INT2 0x11
242#define C6DOFIMU28_REG_EMBF_EMB_FUNC_STATUS 0x12
243#define C6DOFIMU28_REG_EMBF_FSM_STATUS 0x13
244#define C6DOFIMU28_REG_EMBF_MLC_STATUS 0x15
245#define C6DOFIMU28_REG_EMBF_PAGE_RW 0x17
246#define C6DOFIMU28_REG_EMBF_SFLP_GBIASX_L 0x18
247#define C6DOFIMU28_REG_EMBF_SFLP_GBIASX_H 0x19
248#define C6DOFIMU28_REG_EMBF_SFLP_GBIASY_L 0x1A
249#define C6DOFIMU28_REG_EMBF_SFLP_GBIASY_H 0x1B
250#define C6DOFIMU28_REG_EMBF_SFLP_GBIASZ_L 0x1C
251#define C6DOFIMU28_REG_EMBF_SFLP_GBIASZ_H 0x1D
252#define C6DOFIMU28_REG_EMBF_SFLP_GRAVX_L 0x1E
253#define C6DOFIMU28_REG_EMBF_SFLP_GRAVX_H 0x1F
254#define C6DOFIMU28_REG_EMBF_SFLP_GRAVY_L 0x20
255#define C6DOFIMU28_REG_EMBF_SFLP_GRAVY_H 0x21
256#define C6DOFIMU28_REG_EMBF_SFLP_GRAVZ_L 0x22
257#define C6DOFIMU28_REG_EMBF_SFLP_GRAVZ_H 0x23
258#define C6DOFIMU28_REG_EMBF_SFLP_QUATW_L 0x2A
259#define C6DOFIMU28_REG_EMBF_SFLP_QUATW_H 0x2B
260#define C6DOFIMU28_REG_EMBF_SFLP_QUATX_L 0x2C
261#define C6DOFIMU28_REG_EMBF_SFLP_QUATX_H 0x2D
262#define C6DOFIMU28_REG_EMBF_SFLP_QUATY_L 0x2E
263#define C6DOFIMU28_REG_EMBF_SFLP_QUATY_H 0x2F
264#define C6DOFIMU28_REG_EMBF_SFLP_QUATZ_L 0x30
265#define C6DOFIMU28_REG_EMBF_SFLP_QUATZ_H 0x31
266#define C6DOFIMU28_REG_EMBF_SFLP_GBIASX_INIT_L 0x32
267#define C6DOFIMU28_REG_EMBF_SFLP_GBIASX_INIT_H 0x33
268#define C6DOFIMU28_REG_EMBF_SFLP_GBIASY_INIT_L 0x34
269#define C6DOFIMU28_REG_EMBF_SFLP_GBIASY_INIT_H 0x35
270#define C6DOFIMU28_REG_EMBF_SFLP_GBIASZ_INIT_L 0x36
271#define C6DOFIMU28_REG_EMBF_SFLP_GBIASZ_INIT_H 0x37
272#define C6DOFIMU28_REG_EMBF_EMB_FUNC_FIFO_EN_A 0x44
273#define C6DOFIMU28_REG_EMBF_EMB_FUNC_FIFO_EN_B 0x45
274#define C6DOFIMU28_REG_EMBF_FSM_ENABLE 0x46
275#define C6DOFIMU28_REG_EMBF_FSM_LONG_COUNTER_L 0x48
276#define C6DOFIMU28_REG_EMBF_FSM_LONG_COUNTER_H 0x49
277#define C6DOFIMU28_REG_EMBF_INT_ACK_MASK 0x4B
278#define C6DOFIMU28_REG_EMBF_FSM_OUTS1 0x4C
279#define C6DOFIMU28_REG_EMBF_FSM_OUTS2 0x4D
280#define C6DOFIMU28_REG_EMBF_FSM_OUTS3 0x4E
281#define C6DOFIMU28_REG_EMBF_FSM_OUTS4 0x4F
282#define C6DOFIMU28_REG_EMBF_FSM_OUTS5 0x50
283#define C6DOFIMU28_REG_EMBF_FSM_OUTS6 0x51
284#define C6DOFIMU28_REG_EMBF_FSM_OUTS7 0x52
285#define C6DOFIMU28_REG_EMBF_FSM_OUTS8 0x53
286#define C6DOFIMU28_REG_EMBF_SFLP_ODR 0x5E
287#define C6DOFIMU28_REG_EMBF_FSM_ODR 0x5F
288#define C6DOFIMU28_REG_EMBF_MLC_ODR 0x60
289#define C6DOFIMU28_REG_EMBF_STEP_COUNTER_L 0x62
290#define C6DOFIMU28_REG_EMBF_STEP_COUNTER_H 0x63
291#define C6DOFIMU28_REG_EMBF_EMB_FUNC_SRC 0x64
292#define C6DOFIMU28_REG_EMBF_EMB_FUNC_INIT_A 0x66
293#define C6DOFIMU28_REG_EMBF_EMB_FUNC_INIT_B 0x67
294#define C6DOFIMU28_REG_EMBF_EMB_FUNC_SENSOR_CONV_EN 0x6E
295#define C6DOFIMU28_REG_EMBF_MLC1_SRC 0x70
296#define C6DOFIMU28_REG_EMBF_MLC2_SRC 0x71
297#define C6DOFIMU28_REG_EMBF_MLC3_SRC 0x72
298#define C6DOFIMU28_REG_EMBF_MLC4_SRC 0x73
299#define C6DOFIMU28_REG_EMBF_MLC5_SRC 0x74
300#define C6DOFIMU28_REG_EMBF_MLC6_SRC 0x75
301#define C6DOFIMU28_REG_EMBF_MLC7_SRC 0x76
302#define C6DOFIMU28_REG_EMBF_MLC8_SRC 0x77
303
308#define C6DOFIMU28_REG_EMBAF0_FSM_EXT_SENSITIVITY_L 0xBA
309#define C6DOFIMU28_REG_EMBAF0_FSM_EXT_SENSITIVITY_H 0xBB
310#define C6DOFIMU28_REG_EMBAF0_FSM_EXT_OFFX_L 0xC0
311#define C6DOFIMU28_REG_EMBAF0_FSM_EXT_OFFX_H 0xC1
312#define C6DOFIMU28_REG_EMBAF0_FSM_EXT_OFFY_L 0xC2
313#define C6DOFIMU28_REG_EMBAF0_FSM_EXT_OFFY_H 0xC3
314#define C6DOFIMU28_REG_EMBAF0_FSM_EXT_OFFZ_L 0xC4
315#define C6DOFIMU28_REG_EMBAF0_FSM_EXT_OFFZ_H 0xC5
316#define C6DOFIMU28_REG_EMBAF0_FSM_EXT_MATRIX_XX_L 0xC6
317#define C6DOFIMU28_REG_EMBAF0_FSM_EXT_MATRIX_XX_H 0xC7
318#define C6DOFIMU28_REG_EMBAF0_FSM_EXT_MATRIX_XY_L 0xC8
319#define C6DOFIMU28_REG_EMBAF0_FSM_EXT_MATRIX_XY_H 0xC9
320#define C6DOFIMU28_REG_EMBAF0_FSM_EXT_MATRIX_XZ_L 0xCA
321#define C6DOFIMU28_REG_EMBAF0_FSM_EXT_MATRIX_XZ_H 0xCB
322#define C6DOFIMU28_REG_EMBAF0_FSM_EXT_MATRIX_YY_L 0xCC
323#define C6DOFIMU28_REG_EMBAF0_FSM_EXT_MATRIX_YY_H 0xCD
324#define C6DOFIMU28_REG_EMBAF0_FSM_EXT_MATRIX_YZ_L 0xCE
325#define C6DOFIMU28_REG_EMBAF0_FSM_EXT_MATRIX_YZ_H 0xCF
326#define C6DOFIMU28_REG_EMBAF0_FSM_EXT_MATRIX_ZZ_L 0xD0
327#define C6DOFIMU28_REG_EMBAF0_FSM_EXT_MATRIX_ZZ_H 0xD1
328#define C6DOFIMU28_REG_EMBAF0_EXT_CFG_A 0xD4
329#define C6DOFIMU28_REG_EMBAF0_EXT_CFG_B 0xD5
330#define C6DOFIMU28_REG_EMBAF1_XL_HG_SENSITIVITY_L 0x58
331#define C6DOFIMU28_REG_EMBAF1_XL_HG_SENSITIVITY_H 0x59
332#define C6DOFIMU28_REG_EMBAF1_FSM_LC_TIMEOUT_L 0x7A
333#define C6DOFIMU28_REG_EMBAF1_FSM_LC_TIMEOUT_H 0x7B
334#define C6DOFIMU28_REG_EMBAF1_FSM_PROGRAMS 0x7C
335#define C6DOFIMU28_REG_EMBAF1_FSM_START_ADD_L 0x7E
336#define C6DOFIMU28_REG_EMBAF1_FSM_START_ADD_H 0x7F
337#define C6DOFIMU28_REG_EMBAF1_PEDO_CMD 0x83
338#define C6DOFIMU28_REG_EMBAF1_PEDO_DEB_STEPS_CONF 0x84
339#define C6DOFIMU28_REG_EMBAF1_PEDO_SC_DELTAT_L 0xD0
340#define C6DOFIMU28_REG_EMBAF1_PEDO_SC_DELTAT_H 0xD1
341#define C6DOFIMU28_REG_EMBAF1_MLC_EXT_SENSITIVITY_L 0xE8
342#define C6DOFIMU28_REG_EMBAF1_MLC_EXT_SENSITIVITY_H 0xE9
343#define C6DOFIMU28_REG_EMBAF2_EXT_FORMAT 0x00
344#define C6DOFIMU28_REG_EMBAF2_EXT_3BYTE_SENSITIVITY_L 0x02
345#define C6DOFIMU28_REG_EMBAF2_EXT_3BYTE_SENSITIVITY_H 0x03
346#define C6DOFIMU28_REG_EMBAF2_EXT_3BYTE_OFFSET_XL 0x06
347#define C6DOFIMU28_REG_EMBAF2_EXT_3BYTE_OFFSET_L 0x07
348#define C6DOFIMU28_REG_EMBAF2_EXT_3BYTE_OFFSET_H 0x08
349 // c6dofimu28_reg
351
356
361
366#define C6DOFIMU28_FUNC_CFG_ACCESS_EMBF_MASK 0x80
367#define C6DOFIMU28_FUNC_CFG_ACCESS_SHUB_MASK 0x40
368#define C6DOFIMU28_FUNC_CFG_ACCESS_FSM_WR_CTRL_EN 0x08
369#define C6DOFIMU28_FUNC_CFG_ACCESS_SW_POR 0x04
370#define C6DOFIMU28_FUNC_CFG_ACCESS_IF2_RESET 0x02
371#define C6DOFIMU28_FUNC_CFG_ACCESS_OIS_CTRL_FROM_UI 0x01
372
377#define C6DOFIMU28_INT1_CTRL_CNT_BDR 0x40
378#define C6DOFIMU28_INT1_CTRL_FIFO_FULL 0x20
379#define C6DOFIMU28_INT1_CTRL_FIFO_OVR 0x10
380#define C6DOFIMU28_INT1_CTRL_FIFO_TH 0x08
381#define C6DOFIMU28_INT1_CTRL_DRDY_G 0x02
382#define C6DOFIMU28_INT1_CTRL_DRDY_XL 0x01
383
388#define C6DOFIMU28_WHO_AM_I 0x73
389
394#define C6DOFIMU28_CTRL1_OP_MODE_XL_MASK 0x70
395#define C6DOFIMU28_CTRL1_ODR_XL_MASK 0x0F
396
401#define C6DOFIMU28_CTRL2_OP_MODE_G_MASK 0x70
402#define C6DOFIMU28_CTRL2_ODR_G_MASK 0x0F
403
408#define C6DOFIMU28_CTRL3_BOOT 0x80
409#define C6DOFIMU28_CTRL3_BDU 0x40
410#define C6DOFIMU28_CTRL3_IF_INC 0x04
411#define C6DOFIMU28_CTRL3_SW_RESET 0x01
412
417#define C6DOFIMU28_CTRL6_LPF1_G_BW_MASK 0x70
418#define C6DOFIMU28_CTRL6_FS_G_250DPS 0x01
419#define C6DOFIMU28_CTRL6_FS_G_500DPS 0x02
420#define C6DOFIMU28_CTRL6_FS_G_1000DPS 0x03
421#define C6DOFIMU28_CTRL6_FS_G_2000DPS 0x04
422#define C6DOFIMU28_CTRL6_FS_G_4000DPS 0x0C
423#define C6DOFIMU28_CTRL6_FS_G_MASK 0x0F
424
429#define C6DOFIMU28_CTRL8_HP_LPF2_XL_BW_MASK 0xE0
430#define C6DOFIMU28_CTRL8_FS_XL_MASK 0x03
431
436#define C6DOFIMU28_STATUS_TIMESTAMP_ENDCOUNT 0x80
437#define C6DOFIMU28_STATUS_OIS_DRDY 0x20
438#define C6DOFIMU28_STATUS_GDA_EIS 0x10
439#define C6DOFIMU28_STATUS_XLHGDA 0x08
440#define C6DOFIMU28_STATUS_TDA 0x04
441#define C6DOFIMU28_STATUS_GDA 0x02
442#define C6DOFIMU28_STATUS_XLDA 0x01
443
448#define C6DOFIMU28_MEM_BANK_USER 0
449#define C6DOFIMU28_MEM_BANK_SENSOR_HUB 1
450#define C6DOFIMU28_MEM_BANK_EMBEDDED_FUNC 2
451
456#define C6DOFIMU28_ACCEL_ODR_OFF 0
457#define C6DOFIMU28_ACCEL_ODR_1_875_HZ 1
458#define C6DOFIMU28_ACCEL_ODR_7_5_HZ 2
459#define C6DOFIMU28_ACCEL_ODR_15_HZ 3
460#define C6DOFIMU28_ACCEL_ODR_30_HZ 4
461#define C6DOFIMU28_ACCEL_ODR_60_HZ 5
462#define C6DOFIMU28_ACCEL_ODR_120_HZ 6
463#define C6DOFIMU28_ACCEL_ODR_240_HZ 7
464#define C6DOFIMU28_ACCEL_ODR_480_HZ 8
465#define C6DOFIMU28_ACCEL_ODR_960_HZ 9
466#define C6DOFIMU28_ACCEL_ODR_1920_HZ 10
467#define C6DOFIMU28_ACCEL_ODR_3840_HZ 11
468#define C6DOFIMU28_ACCEL_ODR_7680_HZ 12
469
474#define C6DOFIMU28_ACCEL_FS_2G 0
475#define C6DOFIMU28_ACCEL_FS_4G 1
476#define C6DOFIMU28_ACCEL_FS_8G 2
477#define C6DOFIMU28_ACCEL_FS_16G 3
478
483#define C6DOFIMU28_GYRO_ODR_OFF 0
484#define C6DOFIMU28_GYRO_ODR_7_5_HZ 2
485#define C6DOFIMU28_GYRO_ODR_15_HZ 3
486#define C6DOFIMU28_GYRO_ODR_30_HZ 4
487#define C6DOFIMU28_GYRO_ODR_60_HZ 5
488#define C6DOFIMU28_GYRO_ODR_120_HZ 6
489#define C6DOFIMU28_GYRO_ODR_240_HZ 7
490#define C6DOFIMU28_GYRO_ODR_480_HZ 8
491#define C6DOFIMU28_GYRO_ODR_960_HZ 9
492#define C6DOFIMU28_GYRO_ODR_1920_HZ 10
493#define C6DOFIMU28_GYRO_ODR_3840_HZ 11
494#define C6DOFIMU28_GYRO_ODR_7680_HZ 12
495
500#define C6DOFIMU28_GYRO_FS_250DPS 1
501#define C6DOFIMU28_GYRO_FS_500DPS 2
502#define C6DOFIMU28_GYRO_FS_1000DPS 3
503#define C6DOFIMU28_GYRO_FS_2000DPS 4
504#define C6DOFIMU28_GYRO_FS_4000DPS 5
505
510#define C6DOFIMU28_ACCEL_SENS_G_PER_LSB 0.000061
511#define C6DOFIMU28_GYRO_SENS_DPS_PER_LSB 0.00875
512#define C6DOFIMU28_TEMP_SENS_LSB_PER_C 256.0
513#define C6DOFIMU28_TEMP_OFFSET 25.0
514
520#define C6DOFIMU28_DEVICE_ADDRESS_0 0x6A
521#define C6DOFIMU28_DEVICE_ADDRESS_1 0x6B
522
531#define C6DOFIMU28_SET_DATA_SAMPLE_EDGE SET_SPI_DATA_SAMPLE_EDGE
532#define C6DOFIMU28_SET_DATA_SAMPLE_MIDDLE SET_SPI_DATA_SAMPLE_MIDDLE
533 // c6dofimu28_set
535
540
545
550#define C6DOFIMU28_MAP_MIKROBUS( cfg, mikrobus ) \
551 cfg.scl = MIKROBUS( mikrobus, MIKROBUS_SCL ); \
552 cfg.sda = MIKROBUS( mikrobus, MIKROBUS_SDA ); \
553 cfg.miso = MIKROBUS( mikrobus, MIKROBUS_MISO ); \
554 cfg.mosi = MIKROBUS( mikrobus, MIKROBUS_MOSI ); \
555 cfg.sck = MIKROBUS( mikrobus, MIKROBUS_SCK ); \
556 cfg.cs = MIKROBUS( mikrobus, MIKROBUS_CS ); \
557 cfg.int1 = MIKROBUS( mikrobus, MIKROBUS_AN ); \
558 cfg.int2 = MIKROBUS( mikrobus, MIKROBUS_INT )
559 // c6dofimu28_map // c6dofimu28
562
573
578struct c6dofimu28_s;
579typedef err_t ( *c6dofimu28_master_io_t )( struct c6dofimu28_s*, uint8_t, uint8_t*, uint8_t );
580
585typedef struct c6dofimu28_s
586{
587 digital_in_t int2;
588 digital_in_t int1;
589
590 i2c_master_t i2c;
591 spi_master_t spi;
592
594 pin_name_t chip_select;
596
599
600 float gyro_sens;
602
604
609typedef struct
610{
611 pin_name_t scl;
612 pin_name_t sda;
613 pin_name_t miso;
614 pin_name_t mosi;
615 pin_name_t sck;
616 pin_name_t cs;
617 pin_name_t int2;
618 pin_name_t int1;
619
620 uint32_t i2c_speed;
621 uint8_t i2c_address;
622
623 uint32_t spi_speed;
624 spi_master_mode_t spi_mode;
625 spi_master_chip_select_polarity_t cs_polarity;
626
628
630
635typedef struct
636{
637 float x;
638 float y;
639 float z;
640
642
654
665
671
682
698
713
727
740err_t c6dofimu28_write_reg ( c6dofimu28_t *ctx, uint8_t reg, uint8_t data_in );
741
756err_t c6dofimu28_write_regs ( c6dofimu28_t *ctx, uint8_t reg, uint8_t *data_in, uint8_t len );
757
770err_t c6dofimu28_read_reg ( c6dofimu28_t *ctx, uint8_t reg, uint8_t *data_out );
771
786err_t c6dofimu28_read_regs ( c6dofimu28_t *ctx, uint8_t reg, uint8_t *data_out, uint8_t len );
787
797
807
819
834err_t c6dofimu28_set_mem_bank ( c6dofimu28_t *ctx, uint8_t mem_bank );
835
847
871err_t c6dofimu28_set_accel_odr ( c6dofimu28_t *ctx, uint8_t odr );
872
895err_t c6dofimu28_set_gyro_odr ( c6dofimu28_t *ctx, uint8_t odr );
896
911err_t c6dofimu28_set_accel_fsr ( c6dofimu28_t *ctx, uint8_t fsr );
912
928err_t c6dofimu28_set_gyro_fsr ( c6dofimu28_t *ctx, uint8_t fsr );
929
942err_t c6dofimu28_get_accel_drdy ( c6dofimu28_t *ctx, uint8_t *drdy );
943
956err_t c6dofimu28_get_gyro_drdy ( c6dofimu28_t *ctx, uint8_t *drdy );
957
970err_t c6dofimu28_get_temp_drdy ( c6dofimu28_t *ctx, uint8_t *drdy );
971
985
999
1011err_t c6dofimu28_get_temp ( c6dofimu28_t *ctx, float *temp );
1012
1026
1027#ifdef __cplusplus
1028}
1029#endif
1030#endif // C6DOFIMU28_H
1031 // c6dofimu28
1033
1034// ------------------------------------------------------------------------ END
struct c6dofimu28_s c6dofimu28_t
6DOF IMU 28 Click context object.
c6dofimu28_return_value_t
6DOF IMU 28 Click return value data.
Definition c6dofimu28.h:660
@ C6DOFIMU28_ERROR
Definition c6dofimu28.h:662
@ C6DOFIMU28_OK
Definition c6dofimu28.h:661
err_t(* c6dofimu28_master_io_t)(struct c6dofimu28_s *, uint8_t, uint8_t *, uint8_t)
Definition c6dofimu28.h:579
c6dofimu28_drv_t
6DOF IMU 28 Click driver selector.
Definition c6dofimu28.h:568
@ C6DOFIMU28_DRV_SEL_SPI
Definition c6dofimu28.h:569
@ C6DOFIMU28_DRV_SEL_I2C
Definition c6dofimu28.h:570
err_t c6dofimu28_get_data(c6dofimu28_t *ctx, c6dofimu28_data_t *data_out)
6DOF IMU 28 get data function.
err_t c6dofimu28_init(c6dofimu28_t *ctx, c6dofimu28_cfg_t *cfg)
6DOF IMU 28 initialization function.
void c6dofimu28_drv_interface_sel(c6dofimu28_cfg_t *cfg, c6dofimu28_drv_t drv_sel)
6DOF IMU 28 driver interface setup function.
err_t c6dofimu28_set_accel_fsr(c6dofimu28_t *ctx, uint8_t fsr)
6DOF IMU 28 set accel fsr function.
err_t c6dofimu28_get_temp(c6dofimu28_t *ctx, float *temp)
6DOF IMU 28 get temp function.
err_t c6dofimu28_get_accel_drdy(c6dofimu28_t *ctx, uint8_t *drdy)
6DOF IMU 28 get accel drdy function.
err_t c6dofimu28_get_gyro(c6dofimu28_t *ctx, c6dofimu28_axes_t *gyro)
6DOF IMU 28 get gyro function.
err_t c6dofimu28_sw_reset(c6dofimu28_t *ctx)
6DOF IMU 28 sw reset function.
err_t c6dofimu28_read_reg(c6dofimu28_t *ctx, uint8_t reg, uint8_t *data_out)
6DOF IMU 28 read reg function.
err_t c6dofimu28_get_temp_drdy(c6dofimu28_t *ctx, uint8_t *drdy)
6DOF IMU 28 get temp drdy function.
err_t c6dofimu28_set_gyro_odr(c6dofimu28_t *ctx, uint8_t odr)
6DOF IMU 28 set gyro odr function.
err_t c6dofimu28_get_accel(c6dofimu28_t *ctx, c6dofimu28_axes_t *accel)
6DOF IMU 28 get accel function.
err_t c6dofimu28_set_accel_odr(c6dofimu28_t *ctx, uint8_t odr)
6DOF IMU 28 set accel odr function.
void c6dofimu28_cfg_setup(c6dofimu28_cfg_t *cfg)
6DOF IMU 28 configuration object setup function.
err_t c6dofimu28_default_cfg(c6dofimu28_t *ctx)
6DOF IMU 28 default configuration function.
uint8_t c6dofimu28_get_int1_pin(c6dofimu28_t *ctx)
6DOF IMU 28 get int1 pin function.
err_t c6dofimu28_get_gyro_drdy(c6dofimu28_t *ctx, uint8_t *drdy)
6DOF IMU 28 get gyro drdy function.
err_t c6dofimu28_check_communication(c6dofimu28_t *ctx)
6DOF IMU 28 check communication function.
err_t c6dofimu28_write_regs(c6dofimu28_t *ctx, uint8_t reg, uint8_t *data_in, uint8_t len)
6DOF IMU 28 write regs function.
err_t c6dofimu28_set_mem_bank(c6dofimu28_t *ctx, uint8_t mem_bank)
6DOF IMU 28 set mem bank function.
err_t c6dofimu28_set_gyro_fsr(c6dofimu28_t *ctx, uint8_t fsr)
6DOF IMU 28 set gyro fsr function.
err_t c6dofimu28_read_regs(c6dofimu28_t *ctx, uint8_t reg, uint8_t *data_out, uint8_t len)
6DOF IMU 28 read regs function.
uint8_t c6dofimu28_get_int2_pin(c6dofimu28_t *ctx)
6DOF IMU 28 get int2 pin function.
err_t c6dofimu28_write_reg(c6dofimu28_t *ctx, uint8_t reg, uint8_t data_in)
6DOF IMU 28 write reg function.
This file contains SPI specific macros, functions, etc.
6DOF IMU 28 Click axes data structure.
Definition c6dofimu28.h:636
float y
Definition c6dofimu28.h:638
float x
Definition c6dofimu28.h:637
float z
Definition c6dofimu28.h:639
6DOF IMU 28 Click configuration object.
Definition c6dofimu28.h:610
pin_name_t int1
Definition c6dofimu28.h:618
pin_name_t int2
Definition c6dofimu28.h:617
uint32_t i2c_speed
Definition c6dofimu28.h:620
spi_master_chip_select_polarity_t cs_polarity
Definition c6dofimu28.h:625
pin_name_t sck
Definition c6dofimu28.h:615
spi_master_mode_t spi_mode
Definition c6dofimu28.h:624
pin_name_t mosi
Definition c6dofimu28.h:614
c6dofimu28_drv_t drv_sel
Definition c6dofimu28.h:627
uint32_t spi_speed
Definition c6dofimu28.h:623
pin_name_t scl
Definition c6dofimu28.h:611
pin_name_t miso
Definition c6dofimu28.h:613
pin_name_t sda
Definition c6dofimu28.h:612
pin_name_t cs
Definition c6dofimu28.h:616
uint8_t i2c_address
Definition c6dofimu28.h:621
6DOF IMU 28 Click data structure.
Definition c6dofimu28.h:648
c6dofimu28_axes_t accel
Definition c6dofimu28.h:649
c6dofimu28_axes_t gyro
Definition c6dofimu28.h:650
float temperature
Definition c6dofimu28.h:651
6DOF IMU 28 Click context object.
Definition c6dofimu28.h:586
digital_in_t int2
Definition c6dofimu28.h:587
spi_master_t spi
Definition c6dofimu28.h:591
c6dofimu28_master_io_t read_f
Definition c6dofimu28.h:598
digital_in_t int1
Definition c6dofimu28.h:588
float gyro_sens
Definition c6dofimu28.h:600
i2c_master_t i2c
Definition c6dofimu28.h:590
c6dofimu28_drv_t drv_sel
Definition c6dofimu28.h:595
float accel_sens
Definition c6dofimu28.h:601
c6dofimu28_master_io_t write_f
Definition c6dofimu28.h:597
uint8_t slave_address
Definition c6dofimu28.h:593
pin_name_t chip_select
Definition c6dofimu28.h:594